MySQL 5.7vs8.0

1 角色

允许为不同用户分配不同权限。

1
2
3
4
5
6
## 创建角色
CREATE ROLE 'app_developer', 'app_read', 'app_write';
## 分配权限到角色
GRANT SELECT ON app_db.* TO 'app_read';
## 分配角色到用户
GRANT 'app_read' TO 'read_user1'@'localhost', 'read_user2'

2 不可见索引

灵活选择启用或停用索引,而不是频繁创建和删除。

3 配置持久化

以往运行时更改配置,使用SET GLOBAL,不会保存更改。下次启动将还原。

SET PERSIST可以持久化。

4 默认字符集和校对

默认字符集为utf8mb4,校对为utf8mb4_800_ci_ai

5 UUID加强

使用VARBINARY(16)存储,而不是CHAR(36)。提供更好的存储空间利用和性能。

提供操作方法BIN_TO_UUID(), UUID_TO_BIN(), IS_UUID()

6 代价模型改进

第一次查询时,代价模型将检查内存中是否有相关数据。

自动执行,无需额外配置。

7 降序索引

在不影响性能下事项。过去实现会影响性能。

8 通用表表达式

用于简化复杂查询

自动创建临时表,并应用单一查询。

提升可靠性和性能。

参考资料

MySQL 5.7 vs MySQL 8.0 – What’s new in MySQL 8.0?